```tex
\renewcommand{\arraystretch}{1.5}

\begin{longtable}{|p{0.2\textwidth}|p{0.8\textwidth}|}
 \caption{检查点清单（VPN演示）}
 \label{vpn:table:checklist}
 \endfirsthead
 \endhead
 \hline\xrowht[()]{10pt}
 \textbf{\Large 要求} & \textbf{\Large 详情} \\ 
 \hline
 \hline
 \textbf{初始状态} & 
	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 重新启动所有三个虚拟机（VM）。在VM重启后开始录制。你应该立即演示，不要等待太久，否则你可能需要再次进行重启。
		\item 在终端中键入 \texttt{"last reboot; date"} 来显示所有三个VM的重启时间和当前时间。这两个时间之间的差异不应超过5分钟。
		\item 显示所有三个VM的路由表。
	\end{itemize}
 \\ 
 \hline
 
 \textbf{预隧道测试} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 在设置好VPN之前，从主机 \hostu 向主机 \hostv 发送 ping 请求，并解释你的观察结果。
	\end{itemize}
 \\ 
 \hline

 \textbf{隧道创建} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
	   \item 启动vpn客户端和服务器程序。
		\begin{itemize}
		\item 需要输入密码以对服务器进行身份验证，密码不应可见（如果看到你的密码将扣除10分）。可以使用 \texttt{getpass()} 来实现这一点（键入 ``\texttt{man getpass}" 查看其手册）。
		\item 密码不能硬编码在程序中。如果你这样做，将扣除50分。
		\end{itemize}

	   \item 在所有VM上进行配置。虽然可以将配置命令放在脚本中，但你必须展示该脚本并解释脚本中的命令。
	   \item 配置后，在所有三个VM上显示路由表。
	\end{itemize}
 \\ 
 \hline

 \textbf{ping 测试} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 在主机 \hostu 上：向主机 \hostv 发送 ping 请求。
		\item 使用 Wireshark 来证明你的 VPN 正常工作。
		\item 展示隧道确实被加密的证据。
	\end{itemize}
 \\ 
 \hline

 \textbf{telnet 测试} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 在主机 \hostu 上：通过 telnet 连接到主机 \hostv。
		\item 使用 Wireshark 来证明你的 VPN 正常工作。
	\end{itemize}
 \\ 
 \hline

 \textbf{断开隧道测试} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 在主机 \hostu 上，通过 telnet 连接到主机 \hostv。保持 telnet 连接打开的同时断开 VPN 隧道（停止 vpn 客户端和/或服务器程序）。然后在 telnet 窗口中输入一些内容。你能看到你输入的内容吗？TCP 连接会发生什么变化？连接会被中断吗？

		\item 现在重新建立隧道（不要等待太久）。
		重新运行客户端和服务程序，并进行必要的配置（不需要解释或展示命令）。一旦隧道重新建立，telnet 连接会怎样？请描述并解释你的观察结果。

	\end{itemize}
 \\ 
 \hline

 \textbf{大包测试} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
	\item 从主机 \hostu 向主机 \hostv 发送一个大于3000字节的大包。可以使用 \texttt{"ping -s"} 来执行此操作。
	\item 使用 Wireshark 描述并解释你的观察结果。
	\end{itemize}
 \\ 
 \hline

 \textbf{TLS 设置} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 展示你如何在客户端和服务器两侧设置 TLS。
		\item 展示你放置服务器证书和自签名证书的位置。
		\item 展示加载这些证书的代码行。
	\end{itemize}
 \\ 
 \hline

 \textbf{MITM 测试} & 
 	\vspace*{-0.3cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 展示你的系统可以成功抵御 MITM 攻击。你需要设置一个模拟的 MITM 攻击，并展示客户端程序能够击败它。
	\end{itemize}
 \\ 
 \hline

 \textbf{代码解释 1} & 
	哪几行代码负责以下操作：
 	\vspace*{0.2cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 验证服务器证书的有效性
		\item 验证服务器是否是该证书的所有者
		\item 验证服务器是否为目标服务器
	\end{itemize}
 \\ 
 \hline

 \textbf{代码解释 2} & 
	哪一行代码在客户端迫使 TLS 握手停止，如果服务器证书验证失败？
 \\ 
 \hline

 \textbf{代码解释 3} & 
	以下哪些行代码执行以下操作：
	\vspace*{0.2cm}
 	\begin{itemize}[topsep=-0.5cm,leftmargin=0.4cm]
		\item 向服务器发送用户名和密码
		\item 从 shadow 文件中获取账户信息
	\end{itemize}
 \\ 
 \hline

 \textbf{结束时间} & 
键入 \texttt{"last reboot; date"} 命令来显示演示结束前的时间。
 \\ 
 \hline

\end{longtable}
```